#pragma once
#include <functional>
#include "uv.h"
#include "loop_controller.h"
typedef std::function <void(void* usr_data)>timer_cb;
class DllExport uv_timer
{
public:
	uv_timer();
	~uv_timer();
	/**
	 * @brief 开启定时器 
	 * @param uint64_t timeout	timeout 毫秒后执行定时函数
	 * @param uint64_t repeat	执行定时函数的频率。每隔repeat毫秒执行一次定时函数
	 * @param CbFuncTimer cbTimer	定时函数
	 * @param void* userData		用户数据
	 * @return 无
	 * @note 注意
	 * @see  
	 */
	void start_timer(uint64_t timeout,  uint64_t repeat,  timer_cb cbTimer,  void* userData);	
	/**
	 * @brief 内部定时函数 	 
	 * @return 无
	 * @note 注意
	 * @see  
	 */
	static void on_timer(uv_timer_t* rTimer);

	/**
	* @brief 停止定时器
	* @return 无
	* @note 注意
	* @see
	*/
	void stop_timer();
	/**
	 * @brief 返回定时器状态 	 
	 * @return true-正在运行 false-运行停止
	 * @note 注意
	 * @see  
	 */
	bool is_running(){ return m_bRumTimer ;}
private:
	uv_timer_t m_uvTimer;	
	bool m_bRumTimer=false;
	bool m_brepeat=false;
public:
	timer_cb m_timercb;
	void* m_usrData;
};

